home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Indiana Jones / Indiana Jones.exe / RESOURCE / PREVIEW.GOB / cog_pyr_monojackal.cog < prev    next >
Text File  |  1999-11-15  |  17KB  |  698 lines

  1. # Jones 3D Cog Script
  2. #
  3. # pyr_monojackal.cog
  4. #
  5. # mystic eye critters 1 thru 3
  6. #
  7. # [RKD & revised by HB]
  8. #
  9. # (C) 1999 LucasArts Entertainment Company LLC. All Rights Reserved
  10. # ==============================================================================
  11.  
  12. symbols
  13. message        startup
  14. message        activated
  15. message        entered
  16. message        arrived
  17. message        pulse
  18.  
  19. # keyframes
  20. keyframe    lookdown=0in_stand5.key        local
  21.  
  22. # jackal parts
  23. thing    rotator                    #need this due to activate error if jackal has a link
  24. thing    jackal            nolink
  25. thing    jackalbase        nolink
  26. thing    sparkle            nolink
  27. thing    activeye
  28. thing    eye
  29. thing    staticjeep
  30.  
  31. # flame inside pyramid
  32. thing    flame        nolink
  33.  
  34. # actors
  35. thing    player        nolink    local
  36. thing    indyactor0    nolink
  37. thing    indyactor1    nolink
  38. thing    indyactor2    nolink
  39.  
  40. # camera things
  41. thing    jackalcam
  42. thing    jkl_rocam    nolink
  43. thing    rotatecam    nolink
  44. thing    returncam    nolink
  45. thing    hintcam        nolink
  46. thing    cam1spot    local
  47.  
  48. # camera lookthings
  49. thing    rotatecamlook    nolink
  50. thing    jkl_ct_a        nolink
  51. thing    jkl_ct_b        nolink
  52. thing    jkl_rotarg        nolink
  53. thing    cam1look        local
  54.  
  55. # creation aids
  56. template    tpl_ghost=ghost                local
  57.  
  58. # surface over light sentry
  59. surface    sandtrigger
  60.  
  61. # surface of pool, for pyramid 3 only
  62. surface    poolsurface        nolink
  63.  
  64. # Indy's saylines
  65. sound    prismhere=pr13j02.wav            local
  66. sound    operation=pr13j03.wav            local
  67. sound    okaywhat=pr13j04.wav            local
  68. sound    goodlook=pr13j05.wav            local
  69. sound    there=pr13j06.wav                local
  70. sound    whoa=inxj007a.wav                local
  71. sound    quitework=inxj092.wav            local
  72.  
  73. # non-voice sounds
  74. sound    crump=pyr_jackal_stat_start.wav        local
  75. sound    turnstart=nub_2mstep_move_c.wav        local
  76. sound    turnloop=teo_spike_block_c.wav        local
  77. sound    turnstop=gen_stone_stop_c.wav        local
  78. sound    eyein=gen_grenade_bounce.wav        local
  79. sound    jackalmove=pyr_jackal_stat_move.wav    local
  80.  
  81. # music
  82. sound    riseup1=mus_pyr_jackal1.wav            local
  83. sound    riseup2=mus_pyr_jackal2.wav            local
  84. sound    turnround1=mus_pyr_jackalgem2.wav    local
  85. sound    turnround2=mus_pyr_jackalgem1.wav    local
  86.  
  87. # cogs
  88. cog        bigfancydoor
  89. cog        boxcog
  90. cog        glowcog
  91.  
  92. # variables
  93. vector    posOffset        local
  94. vector    angOffset        local
  95. int        vibe            local
  96. int        shake=0            local
  97. int        in_keytrack1    local
  98. int        camexists=0        local
  99. int        locked=0        local
  100. int        actornum=0        local
  101. int        cursound=0        local
  102.  
  103. # subroutines
  104. flex    startscene=0.0        local
  105. flex    endscene=0.0        local
  106. flex    fixcams=0.0            local
  107. flex    movejackal=0.0        local
  108. flex    doorcall=0.0        local
  109. end
  110.  
  111. # ==============================================================================
  112.  
  113. code
  114. startup:
  115.  
  116.     Sleep(0.1);
  117.     player = GetLocalPlayerThing();
  118.     
  119.     # make eye and "activation eye" invisible
  120.     SetThingFlags(eye, 0x10);
  121.     SetThingFlags(activeye, 0x10);
  122.  
  123.     # make sure sandtrigger is no-move and no-see
  124.     ClearAdjoinFlags(sandtrigger, 0x2);
  125.     ClearAdjoinFlags(sandtrigger, 0x1);
  126.     
  127.     # hide jackal to avoid strange sorting problem
  128.     SetThingFlags(jackal, 0x10);
  129.     
  130.     # hide sparkle on eye (animated in proximityglow.cog) and attach it to eye
  131.     AnimateSpriteSize(sparkle, '.1 .1 0.0', '.2 .2 0.0', .1);
  132.     AttachThingToThingEx(sparkle, jackal, 0x08);
  133.  
  134.     # global5 = number of light sentries that have risen from the sand
  135.     # global5 is updated after each light sentry has risen
  136.     global5 = 0;
  137.     
  138.     # global6 = number of times the player has applied the eye
  139.     # global6 is updated after each bar is removed from the door
  140.     global6 = 0;
  141.  
  142.     return;
  143.  
  144. # ..............................................................................
  145.  
  146. entered:
  147. # --> SandTrigger over jackal
  148.     
  149.     #if already triggered, or if light room not prepared, or if Indy is in the jeep, return
  150.     if (locked) return;
  151.     if (GetThingFlags(flame) & 0x10) return;
  152.     if (global2 == 1) return;
  153.     
  154.     # if poolsurface isn't visible, return
  155.     # pyramids 1 and 2 will use a normal sand surface for poolsurface
  156.     if (GetFaceGeoMode(poolsurface) == 0) return;
  157.     
  158.     PlaySoundThing(crump, jackalbase, 1, -1, -1, 0);
  159.  
  160.     # jackalbase makes assembly rise, rotator makes jackal and parts turn
  161.     AttachThingToThing(rotator, jackalbase);
  162.     AttachThingToThing(jackal, rotator);
  163.     AttachThingToThing(eye, jackal);
  164.     AttachThingToThing(activeye, eye);
  165.     
  166.     # light up jackal to avoid popping
  167.     SetThingLight(jackalbase, '100 87 75', .001, .01);
  168.     SetThingLight(jackal, '100 87 75', .001, .01);
  169.     SetThingLight(eye, '100 87 75', .001, .01);
  170.  
  171.     # get player closer to center and identify actor
  172.     Sleep(0.25);
  173.     actornum = 0;
  174.     
  175.     # adjust actor to Indy's facing but keep him in the center of the monojackal
  176.     CopyOrient(player, indyactor0[actornum]);
  177.     
  178.     # start early sound on jackalbase
  179.     cursound = PlaySoundThing(jackalmove, jackalbase, .5, -1, -1, 1);
  180.     ChangeSoundVol(cursound, 1, 1);
  181.     
  182.     # start cam shake...
  183.     shake = 1;
  184.     SetPulse(0.1);
  185.  
  186.     # Indy stops...
  187.     if (MakeMeStop() == -1)
  188.     {
  189.         SetPulse(0);
  190.         return;
  191.     }
  192.  
  193.     # take collision off the unpredictable jeep
  194.     SetCollideType(staticjeep, 0);
  195.     
  196.     StartCutScene(1);
  197.     
  198.     in_keytrack1 = PlayKey(player, lookdown, 4, 0x00, 0);
  199.     
  200.     Sleep(1.0);
  201.     
  202.     locked = 1;
  203.  
  204.     if (VectorDist(GetThingPos(staticjeep), GetThingPos(indyactor0)) < .27)
  205.     {
  206.         Sleep(.5);
  207.         StopSound(cursound, .5);
  208.         Sleep(.5);
  209.         SetPulse(0);
  210.         Sleep(.5);
  211.         StopKey(player, in_keytrack1, .6);
  212.         cursound = PlayVoice(player, quitework, 1, 0);
  213.         WaitForSound(cursound);
  214.         ClearActorFlags(player, 0x200000);
  215.         EndCutscene();
  216.         locked = 0;
  217.         SetCollideType(staticjeep, 3);
  218.         return;
  219.     }
  220.  
  221.     call startscene;
  222.     call movejackal;
  223.  
  224.     return;
  225.  
  226. # ..............................................................................
  227.  
  228. startscene:
  229.     call fixcams;
  230.  
  231.     TeleportThing(player, indyactor0[actornum]);
  232.     CopyPlayerHolsters(player, indyactor0[actornum]);
  233.     ClearThingFlags(indyactor0[actornum], 0x80000);
  234.     AISetCutSceneMode(indyactor0[actornum]);
  235.     SetThingFlags(player, 0x80000);
  236.     
  237.     return;
  238.  
  239. # ..............................................................................
  240.     
  241. movejackal:
  242.  
  243.     #if jackalbase is at starting position
  244.     if (GetCurFrame(jackalbase) == 0)
  245.     {                
  246.         # Going up...
  247.  
  248.         # stop preliminary sound
  249.         StopSound(cursound, .5);
  250.         
  251.         # change to jackalcam
  252.         SetCameraFocus(2, jackalcam);
  253.         SetCameraSecondaryFocus(2, jkl_ct_a);
  254.         SetCurrentCamera(2);
  255.         SetCameraFOV(75, 0, 0.0);
  256.         StopKey(player, in_keytrack1, 0.0);
  257.         in_keytrack1 = PlayKey(indyactor0[actornum], lookdown, 4, 0x10, 0);
  258.  
  259.         # play music depending on 1st or later instances
  260.         if (global5 == 0)
  261.         {
  262.             PlaySoundLocal(riseup1, 1, 0, 0, 0);
  263.         }
  264.         else
  265.         {
  266.             PlaySoundLocal(riseup2, 1, 0, 0, 0);
  267.         }
  268.         
  269.         # Make sure Indy rises with statue...
  270.         DetachThing(indyactor0);
  271.  
  272.         # make sand floor movethru and seethru
  273.         SetAdjoinFlags(sandtrigger, 2);
  274.         SetAdjoinFlags(sandtrigger, 1);
  275.         
  276.         # Show jackal and move it up...
  277.         ClearThingFlags(jackal, 0x10);
  278.         MoveToFrame(jackalbase, 1, 0.5);
  279.         
  280.         # If this is first time, indy reacts appropriately...
  281.         if (global5 == 0)
  282.         {    
  283.             PlayVoice(indyactor0, whoa, 1, 0);            
  284.             # Indy turns to look at front of statue
  285.             SetThingMaxHeadVel(indyactor0, 175);
  286.             SetThingMaxRotVel(indyactor0, 175);
  287.             StopKey(indyactor0[actornum], in_keytrack1, 0.5);
  288.             Sleep(0.5);
  289.             AISetLookThing(indyactor0, indyactor2);
  290.         }
  291.         
  292.         # Move jackal camera back to show Indy and jackal together...
  293.         SetCameraLookInterp(2, 1);
  294.         SetCameraInterpSpeed(2, 3.5);
  295.         Sleep(1.0);
  296.  
  297.         # Track jackal...
  298.         SetCameraSecondaryFocus(2, jkl_ct_b);
  299.         MoveToFrame(jackalcam, 1, .5);
  300.         SetCameraFOV(100, 1, 3.5);
  301.  
  302.         # Indy turns to look at pyramid...
  303.         Sleep(0.5);
  304.         StopKey(indyactor0[actornum], in_keytrack1, 0.5);
  305.         Sleep(0.5);
  306.         SetThingMaxHeadVel(indyactor0, 175);
  307.         SetThingMaxRotVel(indyactor0, 175);
  308.         AISetLookThing(indyactor0, flame);
  309.     }
  310.     else
  311.     {
  312.         # Jackal base is up, move down...
  313.         MoveToFrame(jackalbase, 0, .7);
  314.         shake = 1;
  315.         SetPulse(0.1);
  316.         Sleep(3.0);
  317.         call endscene;
  318.         
  319.         # When jackalbase arrives, clean up and make sure sandtrigger is no-move and no-see
  320.         WaitForStop(jackalbase);
  321.         SetPulse(0.0);
  322.         Sleep(1.0);
  323.         DestroyThing(jackalbase);
  324.         DestroyThing(jackal);
  325.         DestroyThing(rotator);
  326.         DestroyThing(eye);
  327.         ClearAdjoinFlags(sandtrigger, 0x2);
  328.         ClearAdjoinFlags(sandtrigger, 0x1);
  329.     }
  330.     
  331.     return;
  332.  
  333. # ..............................................................................
  334.         
  335. activated:
  336. # --> ActivEye    
  337.  
  338.     if (GetSenderRef() != activeye) return;
  339.  
  340.     # if player holds gemeye or within Marcus
  341.     if ((GetCurItem(player) == 65) || (InEditor() && (GetThingFlags(eye) & 0x10)))
  342.     {    
  343.         # monojackal turns to face pyramid...
  344.         
  345.         # prepare player
  346.         if (MakeMeStop() == -1) return;
  347.         DeselectWeaponWait(player);
  348.         
  349.         StartCutScene(1);
  350.         actornum = 1;
  351.         
  352.         TeleportThing(indyactor0[actornum], player); # backwards from startscene
  353.         CopyPlayerHolsters(player, indyactor0[actornum]);
  354.         ClearThingFlags(indyactor0[actornum], 0x80000);
  355.         AISetCutSceneMode(indyactor0[actornum]);
  356.         SetThingFlags(player, 0x80000);
  357.  
  358.         call fixcams;
  359.  
  360.         if (camexists == 0)
  361.         {
  362.             cam1spot = CreateThing(tpl_ghost, player);
  363.             CaptureThing(cam1spot);
  364.             cam1look = CreateThing(tpl_ghost, player);
  365.             CaptureThing(cam1look);
  366.             camexists = 1;
  367.         }
  368.         Sleep(0.01);
  369.         MakeCamera2LikeCamera1(cam1spot, cam1look);
  370.         SetCameraFocus(2, cam1spot);
  371.         SetCameraSecondaryFocus(2, cam1look);
  372.         SetCurrentCamera(2);
  373.         ResetCameraFOV(0, 0.0);
  374.         Sleep(0.01);
  375.         SetCameraLookInterp(2, 1);
  376.         SetCameraPosInterp(2, 1);
  377.         SetCameraInterpSpeed(2, 0.8);
  378.         Sleep(0.01);
  379.  
  380.         # Cut to camera behind Indy...
  381.         if (global6 == 0)
  382.         {
  383.             SetCameraFocus(2, jkl_rocam);
  384.             SetCameraSecondaryFocus(2, jkl_rotarg);
  385.         }
  386.         else
  387.         {
  388.             SetCameraFocus(2, rotatecam);
  389.             SetCameraSecondaryFocus(2, rotatecamlook);
  390.         }
  391.         AISetLookThing(indyactor1, eye);
  392.  
  393.         # Indy applies the eye (and sayline if 1st time)..
  394.         if (global6 == 0)
  395.         {
  396.             PlayVoice(indyactor1, operation, 1, 0);
  397.             Sleep(2.0);
  398.         }
  399.         
  400.         PlayMode(indyactor1, 61, 0);
  401.         Sleep(0.5);
  402.         
  403.         # Make eye visible and take it out of inventory...
  404.         PlaySoundThing(eyein, eye, 1, -1, -1, 0);
  405.         ClearThingFlags(eye, 0x10);
  406.         ChangeInv(player, 65, -1);
  407.         Sleep(1.0);
  408.  
  409.         SetCameraLookInterp(2, 0);
  410.         SetCameraPosInterp(2, 0);
  411.  
  412.         # play music depending on whether or not door is about to open
  413.         if (global6 == 3)
  414.         {
  415.             PlaySoundLocal(turnround2, 1, 0, 0, 0);
  416.         }
  417.         else
  418.         {
  419.             PlaySoundLocal(turnround1, 1, 0, 0, 0);
  420.         }
  421.         
  422.         # Assembly rotates, camera and camera focus slide sideways...
  423.         PlaySoundThing(turnstart, jackalbase, 1, -1, -1, 0);
  424.         cursound = PlaySoundThing(turnloop, jackalbase, 1, -1, -1, 1);
  425.  
  426.         Rotate(rotator, -180, 1, 5.0);
  427.         if (global6 == 0)
  428.         {
  429.             AttachThingToThing(jkl_rocam, jkl_rotarg);
  430.             Rotate(jkl_rotarg, -140, 1, 5.0);
  431.             SetCameraFOV(70, 1, 5.0);
  432.         }
  433.         MoveToFrame(rotatecam, 1, 0.2);
  434.         MoveToFrame(rotatecamlook, 1, 1.0);
  435.         Sleep(2.5);
  436.         
  437.         # New sayline if this is the 2nd time...
  438.         if (global6 == 1)
  439.         {
  440.             PlayVoice(indyactor1, okaywhat, 1, 0);
  441.         }
  442.         
  443.         # New sayline if this is the 3rd time...
  444.         if (global6 == 2)
  445.         {
  446.             PlayVoice(indyactor1, goodlook, 1, 0);
  447.         }
  448.     }
  449.     else
  450.     {
  451.         # Player doesn't have the gem and it's not on the jackal, Indy gives a hint...
  452.         if (GetThingFlags(eye) & 0x10)
  453.         {
  454.             # prepare player
  455.             if (MakeMeStop() == -1) return;
  456.             DeselectWeaponWait(player);
  457.             
  458.             StartCutscene(1);
  459.  
  460.             SetCameraLookInterp(2, 0);
  461.             SetCameraPosInterp(2, 0);
  462.  
  463.             if (camexists == 0)
  464.             {
  465.                 cam1spot = CreateThing(tpl_ghost, player);
  466.                 CaptureThing(cam1spot);
  467.                 cam1look = CreateThing(tpl_ghost, player);
  468.                 CaptureThing(cam1look);
  469.                 camexists = 1;
  470.             }
  471.             MakeCamera2LikeCamera1(cam1spot, cam1look);
  472.             SetCameraFocus(2, cam1spot);
  473.             SetCameraSecondaryFocus(2, cam1look);
  474.             SetCurrentCamera(2);
  475.             ResetCameraFOV(0, 0.0);
  476.             Sleep(0.01);
  477.             SetCameraLookInterp(2, 1);
  478.             SetCameraPosInterp(2, 1);
  479.             SetCameraInterpSpeed(2, 0.8);
  480.             Sleep(0.01);
  481.             SetCameraFocus(2, hintcam);
  482.             SetCameraSecondaryFocus(2, eye);
  483.             Sleep(0.5);
  484.  
  485.             # Indy needs prism...
  486.             PlayVoice(player, prismhere, 1, 1);
  487.             Sleep(0.5);
  488.             
  489.             # Restore player, end scene
  490.             SetCameraPosition(1, GetThingPos(hintcam));
  491.             SetCurrentCamera(1);
  492.             Sleep(0.5);
  493.  
  494.             EndCutscene();
  495.             ClearActorFlags(player, 0x200000);
  496.  
  497.             return;    
  498.         }
  499.  
  500.         # Player takes gem from jackal...
  501.         if (MakeMeStop() == -1) return;
  502.         DeselectWeaponWait(player);
  503.         
  504.         StartCutScene(1);
  505.         
  506.         actornum = 2;
  507.         call startscene;
  508.         
  509.         # Cut to camera next to Indy...
  510.         SetCameraFocus(2, returncam);
  511.         SetCameraSecondaryFocus(2, jkl_rotarg);
  512.         SetCurrentCamera(2);
  513.         
  514.         # Make eye invisible on jackal and add it to inventory...
  515.         PlayMode(indyactor2, 61, 0);
  516.         Sleep(0.5);
  517.         PlaySoundThing(eyein, eye, 1, -1, -1, 0);
  518.         SetThingFlags(eye, 0x10);
  519.         SetThingLight(eye, VectorSet(0, 0, 0), .001, .1);
  520.         ChangeInv(player, 65, 1.0);
  521.         SetInvAvailable(player, 65, 1);
  522.         JonesInvItemChanged(65);
  523.  
  524.         # detach these to avoid rotation slowness
  525.         DetachThing(eye);
  526.         DetachThing(activeye);
  527.         
  528.         # Rotate jackal back around...
  529.         PlaySoundThing(turnstart, jackalbase, 1, -1, -1, 0);
  530.         cursound = PlaySoundThing(turnloop, jackalbase, 1, -1, -1, 1);
  531.         Rotate(rotator, 180, 1, 4);        
  532.     }
  533.  
  534.     return;
  535.  
  536. # ..............................................................................
  537.  
  538. arrived:
  539. # ---> JackalCam or Rotator
  540.     
  541.     # ==JackalCam==
  542.     # pause and call endscene
  543.     if (GetSenderRef() == jackalcam)
  544.     {
  545.         Sleep(1.0);    
  546.         SetPulse(0.0);
  547.         Sleep(1.5);
  548.         call endscene;
  549.         
  550.         # Add 1 to monojackal rise count...
  551.         global5 = global5 + 1;
  552.         
  553.         # return collision to the jeep
  554.         SetCollideType(staticjeep, 3);
  555.  
  556.         return;
  557.     }
  558.     
  559.     # ==Rotator==    
  560.     if (GetThingFlags(eye) & 0x10)
  561.     {
  562.         # Eye is invisible, move jackal back down...
  563.         PlaySoundThing(turnstop, jackalbase, 1, -1, -1, 0);
  564.         StopSound(cursound, 0.1);
  565.         call movejackal;
  566.     }
  567.     else
  568.     {
  569.         # Pull door bar free...
  570.         PlaySoundThing(turnstop, jackalbase, 1, -1, -1, 0);
  571.         StopSound(cursound, 0.1);
  572.  
  573.         # Make the eye sparkle a couple times
  574.         AnimateSpriteSize(sparkle, '.08 .08 0.0', '.15 .15 1.0', .1);
  575.  
  576.         # New sayline if this is the 4th time...
  577.         if (global6 == 3)
  578.         {
  579.             PlayVoice(indyactor1, there, 1, 0);
  580.         }
  581.         
  582.         Sleep(2.5);
  583.         call doorcall;
  584.     }
  585.  
  586.     return;
  587.  
  588. # ..............................................................................
  589.  
  590. endscene:
  591.  
  592.     call fixcams;
  593.  
  594.     TeleportThing(player, indyactor0[actornum]);
  595.     SetThingFlags(indyactor0[actornum], 0x80000);
  596.     ClearThingFlags(player, 0x80000);
  597.  
  598.     # Establish a camera position near Indy and prep follow-cam...            
  599.     SetCameraPosition(1, VectorAdd(VectorTransformToOrient(player, '0.25 -0.05 0.0'), GetThingPos(player)));    
  600.  
  601.     SetCurrentCamera(1);
  602.     ResetCameraFOV(0, 0.0);
  603.     EndCutscene();
  604.     ClearActorFlags(player, 0x200000);
  605.  
  606.     return;
  607.  
  608. # ..............................................................................
  609.  
  610. fixcams:
  611.  
  612.     # Reset camera settings...
  613.     ResetCameraFOV(0, 0.0);
  614.     SetCameraPosInterp(2, 0);
  615.     SetCameraLookInterp(2, 0);
  616.  
  617.     return;
  618.  
  619. # ..............................................................................
  620.  
  621. doorcall:
  622.  
  623.     # tell door to open lock
  624.     SendMessage(bigfancydoor, user1);
  625.         
  626.     # turn sparkle off
  627.     AnimateSpriteSize(sparkle, '.1 .1 0.0', '.2 .2 0.0', .1);
  628.     
  629.     # add 1 to doorbar-removed count
  630.     global6 = global6 + 1;
  631.     
  632.     # give doorcog time to play scene (longer if door has to open)
  633.     if (global6 < 4)
  634.     {
  635.         Sleep(5.0);
  636.     }
  637.     else
  638.     {
  639.         Sleep(12.0);
  640.     }
  641.     
  642.     # Tell lightbox cog to turn off the flame
  643.     SendMessage(boxcog, user1);
  644.     
  645.     # tell lightbox cog to turn off the flame
  646.     SendMessage(glowcog, user1);
  647.     
  648.     call endscene;
  649.     
  650.     return;
  651.  
  652. # ..............................................................................
  653.  
  654. pulse:
  655.  
  656.     vibe = RandBetween(1, 4);
  657.     if (vibe == 1)
  658.     {
  659.         posOffset = '-0.005 0.00 -0.001'; #1 was .005x
  660.         angOffset = '0.00 -0.001 0.001';
  661.     }
  662.    if (vibe == 2)
  663.     {
  664.         posOffset = '0.005 -0.003 0.001'; #2 was .005x
  665.         angOffset = '0.001 0.00 -0.001';
  666.     }
  667.     if (vibe == 3)
  668.     {
  669.         posOffset = '0.003 0.003 -0.003'; #3 was .002x
  670.         angOffset = '-0.001 0.003 -0.003';
  671.     }
  672.     if (vibe == 4)
  673.     {
  674.         posOffset = '-0.001 0.00 0.003'; #4
  675.         angOffset = '0.00 0.00 0.001';
  676.     }
  677.  
  678.     vibe = RandBetween(1, 3);
  679.     if (vibe == 1)
  680.     {
  681.         SetPulse(0.05);
  682.     }
  683.     if (vibe == 2)
  684.     {
  685.         SetPulse(0.1);
  686.     }
  687.     if (vibe == 3)
  688.     {
  689.         SetPulse(0.15);
  690.     }
  691.  
  692.     SetPOVShake(posOffSet, angOffSet, 0.1, 30.0);
  693.     
  694.     return;
  695.  
  696. end
  697.  
  698.